package com.gorkr;

import org.junit.jupiter.api.Test;

/**
 * 二进制求和
 */
public class L67 {
//    public String addBinary(String a, String b){
//        StringBuffer sb = new StringBuffer();
//        // 倒数第一位二进制
//        int aLen = a.length()-1;
//        int bLen = b.length()-1;
//
//        int sum = 0;
//        int step = 0;
//
//        while (aLen>=0||bLen>=0||step!=0){
//            if(aLen>=0){
//                if(bLen>=0){
//                    sum =  a.charAt(aLen--)-'0'+ b.charAt(bLen--)-'0'+step;
//                }else {
//                    sum = a.charAt(aLen--)-'0'+step;
//                }
//            }else {
//                if(bLen>=0){
//                    sum = b.charAt(bLen--)-'0'+step;
//                }else {
//                    sum =step;
//                }
//
//            }
//
//            if(sum>=2){
//                step=1;
//                sum-=2;
//            }else {
//                step=0;
//            }
//            sb.append(sum);
//        }
//
//
//
//        return sb.reverse().toString();
//    }

    public String addBinary(String a, String b){
        StringBuilder result = new StringBuilder();
        int i = a.length()-1;
        int j = b.length()-1;
        int carry = 0;
        while (i>=0||j>=0){
            int digitA = i>=0? a.charAt(i--) - '0':0;
            int digitB = j>=0? b.charAt(j--)-'0':0;
            int sum = digitA+digitB+carry;
            carry = sum>=2?1:0;
            sum=sum>=2?sum-2:sum;
            result.append(sum);
        }

        if(carry==1){
            result.append(1);
        }
        return result.reverse().toString();
    }

    @Test
    public void test(){
        System.out.println(addBinary("1111","1111"));
    }
}
